package br.com.maiscontrole.view.site.beans.abst;

import java.lang.reflect.ParameterizedType;

import br.com.base.model.Entidade;
import br.com.maiscontrole.facade.Facade;

/**
 * 
 * @author milton
 *
 * @param <ENTITY>
 */
public abstract class AbstractEditMDV<ENTIDADE extends Entidade<Long>> {

	private ENTIDADE entidade;
	private Facade facade;

	public AbstractEditMDV(Facade facade) {
		this.setFacade(facade);
		this.criarEntidade();
	}

	public abstract void carregarEntidade();

	@SuppressWarnings("unchecked")
	public void criarEntidade() {
		try{
			ParameterizedType type = ((ParameterizedType) this.getClass().getGenericSuperclass());
			Class<ENTIDADE> entidade = (Class<ENTIDADE>) type.getActualTypeArguments()[0];
			this.setEntidade(entidade.newInstance());
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public abstract void excluir(ENTIDADE entidade);

	public ENTIDADE getEntidade() {
		return this.entidade;
	}

	public Facade getFacade() {
		return this.facade;
	}

	public void limpar(){
		this.setEntidade(null);
	}

	public abstract void salvar(ENTIDADE entidade);

	public void setEntidade(ENTIDADE entidade) {
		this.entidade = entidade;
	}

	public void setFacade(Facade facade) {
		this.facade = facade;
	}

}
